<?php
class View{

	// Name des Templates, in dem Fall das Standardtemplate.
	protected $template = 'default';

	/**
	 * Enthält die Variablen, die in das Template eingebetet
	 * werden sollen.
	 */
	protected $values = array();
	
	
	//TODO: Implementieren
	public function GetOutValue($key)
	{
		return $this->values[$key];
	}

	
	/**
	 * Ordnet eine Variable einem bestimmten Schl&uuml;ssel zu.
	 *
	 * @param String $key Schl�ssel
	 * @param String $value Variable
	 */
	public function SetOutValue($key, $value){
		$this->values[$key] = $value;
	}
	
	
	//TODO: Implementieren
	public function GetOutValues()
	{
		return $this->values;
	}
	
	
	
	//TODO: Implementieren
	public function __construct()
	{
		$this->values = array();
	}
	
	
	
	//TODO: Implementieren
	public function Display()
	{
		$this->loadTemplate();
	}
	


	/**
	 * Setzt den Namen des Templates.
	 *
	 * @param String $template Name des Templates.
	 */
	public function setTemplate($template = 'default'){
		$this->template = $template;
	}


	/**
	 * Das Template-File laden und zurückgeben
	 *
	 * @param string $tpl Der Name des Template-Files (falls es nicht vorher 
	 * 					  über steTemplate() zugewiesen wurde).
	 * @return string Der Output des Templates.
	 */
	public function Display(){
		$tpl = $this->template;
		// Pfad zum Template erstellen & überprüfen ob das Template existiert.
		$file = 'templates/'.$tpl.'.php';
		$exists = file_exists($file);

		//if ($exists){
			// Der Output des Scripts wird n einen Buffer gespeichert, d.h.
			// nicht gleich ausgegeben.
			ob_start();

			// Das Template-File wird eingebunden und dessen Ausgabe in
			// $output gespeichert.
			include 'templates/header.php';
			include 'templates/menu.php';
			include $file;
			include 'templates/footer.php';
			$output = ob_get_contents();
			ob_end_clean();
				
			// Output zurückgeben.
			return $output;
			/*
		}
		else {
			// Template-File existiert nicht-> Fehlermeldung.
			return 'could not find template:'.$this->template;
		}*/
	}
	
	//TODO: OOP-Redesign dieser Sektion
	/************************************************************
	* HILFSFUNKTIONEN ZUM SETZEN DER VARIABLEN FÜR DIE TEMPLATES
	*************************************************************/
	
	
	
	//Erzeugt aus einer Gegebenen KDomain rekursiv ein array mit Name und Kindelementen
	protected function createUserKDomainArr($kDomain)
	{
	  $returnArr = array();
	  $returnArr['name'] = $kDomain->GetName();
	  $childArr = array();
	  //Hier wird rekursiv gearbeitet
	  foreach ($kDomain->GetChilds() as $child)
	  {
	    if ($child->IsSelected())
	    {
	      $childArr[] = self::createUserKDomainArr($child);
	    }
	  }
	  if (!empty($childArr))
	  {
	    $returnArr['childs'] = $childArr;
	  }
	  return $returnArr;
	}
	
	
	
	protected function ViewUserPage($userId)
	{
		$user = User.GetUserById($userId);
		//DB::LoadUserQuestions($user);
		
		$this->view->SetOutValue('userName', $user->GetName());
		$questions = array();
		
		//Erzeugt mithilfe einer Hilfsfunktion das Ausgabearray für die kDomains 
		$this->view->SetOutValue('kDomains', $this->createUserKDomainArr($user->GetKDomains()));
		
		foreach (($user->GetQuestions()) as $question)
		{
			$outQuestion = array();
			$outQuestion['title'] = $question->GetTitle();
			$outQuestion['text'] = $question->GetText();
			$outQuestion['askedAt'] = $question->GetAskedAt();
			$outQuestion['askedBy'] = $question->GetAskedByName();
			$outQuestion['answer'] = $question->GetAnswer();
			$outQuestion['answeredAt'] = $question->GetAnsweredAt();
			$outQuestion['feedback'] = $question->GetFeedback();
			$questions[] = $outQuestion;
		}
		$this->view->SetOutValue('questions', $questions);
		
		$this->view->Display();
	}
	
	
	
}
?>